home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1996-12-06 | 16.9 KB | 647 lines | [TEXT/3PRM] |
- implementation module quickdraw;
-
- import StdInt;
- import mac_types;
-
- BlackColor:==33;
- WhiteColor:==30;
- RedColor:==205;
- GreenColor:==341;
- BlueColor:==409;
- CyanColor:==273;
- MagentaColor:== 137;
- YellowColor:== 69;
-
- PatCopy :== 8;
- PatOr :== 9;
- PatXor :== 10;
- PatBic :== 11;
- NotPatCopy :== 12;
- NotPatOr :== 13;
- NotPatXor :== 14;
- NotPatBic :== 15;
- PatHilite :== 50;
-
- White :== (0,0);
- Black :== (-1,-1);
- Gray :== (1437226410,1437226410);
- LtGray :== (-2011002846,-2011002846);
- DkGray :== (2011002845,2011002845);
-
- Bold :== 1;
- Italic :== 2;
- Underline :== 4;
- Outline :== 8;
- Shadow :== 16;
- Condense :== 32;
- Extend :== 64;
-
- SrcCopy :== 0;
- SrcOr :== 1;
- SrcXor :== 2;
- SrcBic :== 3;
-
- ScrnHResAddress :== 260;
- ScrnVResAddress :== 258;
-
- :: GrafPtr :== Int;
- :: PicHandle :== Int;
- :: PolyHandle :== Int;
- :: RGBColor :== (!Int,!Int,!Int);
-
- // GrafPort Routines
-
- QSetPort :: !GrafPtr !Toolbox -> Toolbox;
- QSetPort port t = code (port=L,t=U)(z=Z){
- instruction 0xA873
- };
-
- QGetPort :: !Toolbox -> (!GrafPtr,!Toolbox);
- QGetPort t = code (t=R4O0U)(current_port=L,z=Z){
- instruction 0xA874
- };
-
- QSetOrigin :: !Int !Int !Toolbox -> Toolbox;
- QSetOrigin h v t = code (h=W,v=W,t=U)(z=Z){
- instruction 0xA878
- };
-
- QSetClip :: !RgnHandle !Toolbox -> Toolbox;
- QSetClip rgn t = code (rgn=L,t=U)(z=Z){
- instruction 0xA879
- };
-
- QGetClip :: !RgnHandle !Toolbox -> (!RgnHandle,!Toolbox);
- QGetClip rgn t = code (rgn=L,t=U)(rgn`=D1,z=Z){
- instruction 0x2A01 || move.l d1,d5
- instruction 0xA87A
- instruction 0x2205 || move.l d5,d1
- };
-
- QClipRect :: !Rect !Toolbox -> Toolbox;
- QClipRect (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA87B
- };
-
- // Cursor-Handling Routines
-
- QInitCursor :: !Toolbox -> Toolbox;
- QInitCursor t = code (t=U)(z=Z){
- instruction 0xA850
- };
-
- QSetCursor :: !Ptr !Toolbox -> Toolbox;
- QSetCursor crsr t = code (crsr=L,t=U)(z=Z){
- instruction 0xA851
- };
-
- QHideCursor :: !Toolbox -> Toolbox;
- QHideCursor t = code (t=U)(z=Z){
- instruction 0xA852
- };
-
- QShowCursor :: !Toolbox -> Toolbox;
- QShowCursor t = code (t=U)(z=Z){
- instruction 0xA853
- };
-
- QObscureCursor :: !Toolbox -> Toolbox;
- QObscureCursor t = code (t=U)(z=Z){
- instruction 0xA856
- };
-
- // Pen and Line-Drawing Routines
-
- QHidePen :: !Toolbox -> Toolbox;
- QHidePen t = code (t=U)(z=Z){
- instruction 0xA896
- };
-
- QShowPen :: !Toolbox -> Toolbox;
- QShowPen t = code (t=U)(z=Z){
- instruction 0xA897
- };
-
- QGetPen :: !Toolbox -> (!Int,!Int,!Toolbox);
- QGetPen t = (h,v,t1);
- where {
- (v,h,t1) = QGetPen` t;
- };
-
- QGetPen` :: !Toolbox -> (!Int,!Int,!Toolbox);
- QGetPen` t = code (t=R4O0U)(v=W,h=W,d=Z){
- instruction 0xA89A || _GetPen
- };
-
- QPenSize :: !Int !Int !Toolbox -> Toolbox;
- QPenSize width height t = code (width=W,height=W,t=U)(z=Z){
- instruction 0xA89B
- };
-
- QPenMode :: !Int !Toolbox -> Toolbox;
- QPenMode mode t = code (mode=W,t=U)(z=Z){
- instruction 0xA89C
- };
-
- QPenPat :: !(!Int,!Int) !Toolbox -> Toolbox;
- QPenPat (pat1,pat2) t = code (pat2=L,pat1=L,t=O0U)(z=I8Z){
- instruction 0xA89D
- };
-
- QPenNormal :: !Toolbox -> Toolbox;
- QPenNormal t = code (t=U)(z=Z){
- instruction 0xA89E
- };
-
- QMoveTo :: !Int !Int !Toolbox -> Toolbox;
- QMoveTo h v t = code (h=W,v=W,t=U)(z=Z){
- instruction 0xA893
- };
-
- QMove :: !Int !Int !Toolbox -> Toolbox;
- QMove dh dv t = code (dh=W,dv=W,t=U)(z=Z){
- instruction 0xA894
- };
-
- QLineTo :: !Int !Int !Toolbox -> Toolbox;
- QLineTo h v t = code (h=W,v=W,t=U)(z=Z){
- instruction 0xA891
- };
-
- QLine :: !Int !Int !Toolbox -> Toolbox;
- QLine dh dv t = code (dh=W,dv=W,t=U)(z=Z){
- instruction 0xA892
- };
-
- // Text-Drawing Routines
-
- QTextFont :: !Int !Toolbox -> Toolbox;
- QTextFont font t = code (font=W,t=U)(z=Z){
- instruction 0xA887
- };
-
- QTextFace :: !Int !Toolbox -> Toolbox;
- QTextFace face t = code (face=W,t=U)(z=Z){
- instruction 0xA888
- };
-
- QTextMode :: !Int !Toolbox -> Toolbox;
- QTextMode mode t = code (mode=W,t=U)(z=Z){
- instruction 0xA889
- };
-
- QTextSize :: !Int !Toolbox -> Toolbox;
- QTextSize size t = code (size=W,t=U)(z=Z){
- instruction 0xA88A
- };
-
- QDrawChar :: !Char !Toolbox -> Toolbox;
- QDrawChar char t = code (char=W,t=U)(z=Z){
- instruction 0xA883
- };
-
- QDrawString :: !{#Char} !Toolbox -> Toolbox;
- QDrawString s t = code (s=A0,t=U)(z=Z){
- instruction 0x4868 0x0008 | pea 8(a0)
- instruction 0x4267 | clr -(sp)
- instruction 0x3F28 0x0006 | move 6(a0),-(sp)
- instruction 0xA885 | _DrawText
- };
-
- QCharWidth :: !Char !Toolbox -> (!Int,!Toolbox);
- QCharWidth char t = code (char=R2W,t=U)(width=W,z=Z){
- instruction 0xA88D | _CharWidth
- };
-
- QStringWidth :: !{#Char} !Toolbox -> (!Int,!Toolbox);
- QStringWidth s t = code (s=R2A0,t=U)(width=W,z=Z){
- instruction 0x4868 0x0008 | pea 8(a0)
- instruction 0x4267 | clr -(sp)
- instruction 0x3F28 0x0006 | move 6(a0),-(sp)
- instruction 0xA886 | _TextWidth
- };
-
- QGetFontInfo :: !Toolbox -> (!Int,!Int,!Int,!Int,!Toolbox);
- QGetFontInfo t = code (t=R8O0U)(ascent=W,descent=W,widMax=W,leading=W,z=Z){
- instruction 0xA88B
- };
-
- // Drawing in Color
-
- QForeColor :: !Int !Toolbox -> Toolbox;
- QForeColor color t = code (color=L,t=U)(z=Z){
- instruction 0xA862
- };
-
- QRGBBackColor :: !RGBColor !Toolbox -> Toolbox;
- QRGBBackColor (red,green,blue) t
- = code (blue=W,green=W,red=W,t=O0U)(z=I6Z){
- instruction 0xAA15
- };
-
- QRGBForeColor :: !RGBColor !Toolbox -> Toolbox;
- QRGBForeColor (red,green,blue) t
- = code (blue=W,green=W,red=W,t=O0U)(z=I6Z){
- instruction 0xAA14
- };
-
- QSetCPixel :: !Int !Int !RGBColor !Toolbox -> Toolbox;
- QSetCPixel h v (red,green,blue) t
- = code (blue=W,green=W,red=W,h=W,v=W,t=O4U)(z=I6Z){
- instruction 0xAA16
- };
-
- QBackColor :: !Int !Toolbox -> Toolbox;
- QBackColor color t = code (color=L,t=U)(z=Z){
- instruction 0xA863
- };
-
- // Calculations with Rectangles
-
- // Graphic Operations on Rectangles
-
- QFrameRect :: !Rect !Toolbox -> Toolbox;
- QFrameRect (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8A1
- };
-
- QPaintRect :: !Rect !Toolbox -> Toolbox;
- QPaintRect (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8A2
- };
-
- QEraseRect :: !Rect !Toolbox -> Toolbox;
- QEraseRect (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8A3
- };
-
- QInvertRect :: !Rect !Toolbox -> Toolbox;
- QInvertRect (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8A4
- };
-
- // Graphic operations on Ovals
-
- QFrameOval :: !Rect !Toolbox -> Toolbox;
- QFrameOval (left,top,right,bottom) t =
- code (right=W, bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8B7
- };
-
- QPaintOval :: !Rect !Toolbox -> Toolbox;
- QPaintOval (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8B8
- };
-
- QEraseOval :: !Rect !Toolbox -> Toolbox;
- QEraseOval (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8B9
- };
-
- QInvertOval :: !Rect !Toolbox -> Toolbox;
- QInvertOval (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=O0U)(z=I8Z){
- instruction 0xA8BA
- };
-
- // Graphic Operations on Rounded-Corner Rectangles
-
- QFrameRoundRect :: !Rect !Int !Int !Toolbox -> Toolbox;
- QFrameRoundRect (left,top,right,bottom) ovalWidth ovalHeight t =
- code (right=W,bottom=W,left=W,top=W,ovalWidth=O0W,ovalHeight=W,t=U)(z=I8Z){
- instruction 0xA8B0
- };
-
- QPaintRoundRect :: !Rect !Int !Int !Toolbox -> Toolbox;
- QPaintRoundRect (left,top,right,bottom) ovalWidth ovalHeight t =
- code (right=W,bottom=W,left=W,top=W,ovalWidth=O0W,ovalHeight=W,t=U)(z=I8Z){
- instruction 0xA8B1
- };
-
- QEraseRoundRect :: !Rect !Int !Int !Toolbox -> Toolbox;
- QEraseRoundRect (left,top,right,bottom) ovalWidth ovalHeight t =
- code (right=W,bottom=W,left=W,top=W,ovalWidth=O0W,ovalHeight=W,t=U)(z=I8Z){
- instruction 0xA8B2
- };
-
- QInvertRoundRect :: !Rect !Int !Int !Toolbox -> Toolbox;
- QInvertRoundRect (left,top,right,bottom) ovalWidth ovalHeight t =
- code (right=W,bottom=W,left=W,top=W,ovalWidth=O0W,ovalHeight=W,t=U)(z=I8Z){
- instruction 0xA8B3
- };
-
- // Graphic Operations on Arcs and Wedges
-
- QFrameArc :: !Rect !Int !Int !Toolbox -> Toolbox;
- QFrameArc (left,top,right,bottom) startAngle arcAngle t =
- code (right=W,bottom=W,left=W,top=W,startAngle=O0W,arcAngle=W,t=U)(z=I8Z){
- instruction 0xA8BE
- };
-
- QPaintArc :: !Rect !Int !Int !Toolbox -> Toolbox;
- QPaintArc (left,top,right,bottom) startAngle arcAngle t =
- code (right=W,bottom=W,left=W,top=W,startAngle=O0W,arcAngle=W,t=U)(z=I8Z){
- instruction 0xA8BF
- };
-
- QEraseArc :: !Rect !Int !Int !Toolbox -> Toolbox;
- QEraseArc (left,top,right,bottom) startAngle arcAngle t =
- code (right=W,bottom=W,left=W,top=W,startAngle=O0W,arcAngle=W,t=U)(z=I8Z){
- instruction 0xA8C0
- };
-
- QInvertArc :: !Rect !Int !Int !Toolbox -> Toolbox;
- QInvertArc (left,top,right,bottom) startAngle arcAngle t =
- code (right=W,bottom=W,left=W,top=W,startAngle=O0W,arcAngle=W,t=U)(z=I8Z){
- instruction 0xA8C1
- };
-
- // Calculations with Regions
-
- QNewRgn :: !Toolbox -> (!RgnHandle, !Toolbox);
- QNewRgn t = code (t=R4U)(region=L,z=Z){
- instruction 0xA8D8 || _NewRgn
- };
-
- QOpenRgn :: !RgnHandle !Toolbox -> Toolbox;
- QOpenRgn region t = code (region=U,t=U)(z=Z){
- instruction 0xA8DA || _OpenRgn
- };
-
- QCloseRgn :: !RgnHandle !Toolbox -> Toolbox;
- QCloseRgn region t = code (region=L,t=U)(z=Z){
- instruction 0xA8DB
- };
-
- QDisposeRgn :: !RgnHandle !Toolbox -> Toolbox;
- QDisposeRgn region t = code (region=L,t=u)(z=Z){
- instruction 0xA8D9
- };
-
- QOffsetRgn :: !RgnHandle !Int !Int !Toolbox -> Toolbox;
- QOffsetRgn region dh dv t = code (region=L,dh=W,dv=W,t=U)(z=Z){
- instruction 0xA8E0
- };
-
- QRectRgn :: !RgnHandle !Rect !Toolbox -> Toolbox;
- QRectRgn rgn (left,top,right,bottom) t =
- code (right=W, bottom=W, left=W, top=W,rgn=L,t=O4U)(z=I8Z){
- instruction 0xA8DF
- };
-
- QSectRgn :: !RgnHandle !RgnHandle !RgnHandle !Toolbox -> (!RgnHandle, !Toolbox);
- QSectRgn srcRgnA srcRgnB dstRgn t =
- code (srcRgnA=L,srcRgnB=L,dstRgn=D1,t=U)(srcRgn`=D1,z=Z){
- instruction 0x2A01 || move.l d1,d5
- instruction 0x2F01 || move.l d1,-(sp)
- instruction 0xA8E4
- instruction 0x2205 || move.l d5,d1
- };
-
- QUnionRgn :: !RgnHandle !RgnHandle !RgnHandle !Toolbox -> (!RgnHandle, !Toolbox);
- QUnionRgn srcRgnA srcRgnB dstRgn t =
- code (srcRgnA=L,srcRgnB=L,dstRgn=D1,t=U)(srcRgn`=D1,z=Z){
- instruction 0x2A01 || move.l d1,d5
- instruction 0x2F01 || move.l d1,-(sp)
- instruction 0xA8E5
- instruction 0x2205 || move.l d5,d1
- };
-
- QDiffRgn :: !RgnHandle !RgnHandle !RgnHandle !Toolbox -> (!RgnHandle, !Toolbox);
- QDiffRgn srcRgnA srcRgnB dstRgn t =
- code (srcRgnA=L,srcRgnB=L,dstRgn=D1,t=U)(srcRgn`=D1,z=Z){
- instruction 0x2A01 || move.l d1,d5
- instruction 0x2F01 || move.l d1,-(sp)
- instruction 0xA8E6
- instruction 0x2205 || move.l d5,d1
- };
-
- QPtInRgn :: !(!Int,!Int) !RgnHandle !Toolbox -> (!Bool,!Toolbox);
- QPtInRgn (x,y) rgn t = code (x=R2W,y=W,rgn=L,t=U)(b=D1,z=Z){
- instruction 0xA8E8
- instruction 0x7000 || moveq #0,d0
- instruction 0x101F || move.b (sp)+,d0
- instruction 0x4440 || neg.w d0
- instruction 0x48C0 || ext.l d0
- instruction 0x2200 || move.l d0,d1
- };
-
- QEmptyRgn :: !RgnHandle !Toolbox -> (!Bool, !Toolbox);
- QEmptyRgn region t = code (region=R2L,t=U)(empty_region=D1,z=Z){
- instruction 0xA8E2
- instruction 0x7000 || moveq #0,d0
- instruction 0x101F || move.b (sp)+,d0
- instruction 0x4440 || neg.w d0
- instruction 0x48C0 || ext.l d0
- instruction 0x2200 || move.l d0,d1
- };
-
- // Graphic Operations on Regions
-
- QFrameRgn :: !RgnHandle !Toolbox -> Toolbox;
- QFrameRgn region t = code (region=L,t=U)(z=Z){
- instruction 0xA8D2
- };
-
- QPaintRgn :: !RgnHandle !Toolbox -> Toolbox;
- QPaintRgn region t = code (region=L,t=U)(z=Z){
- instruction 0xA8D3
- };
-
- QEraseRgn :: !RgnHandle !Toolbox -> Toolbox;
- QEraseRgn region t = code (region=L,t=U)(z=Z){
- instruction 0xA8D4
- };
-
- QInvertRgn :: !RgnHandle !Toolbox -> Toolbox;
- QInvertRgn region t = code (region=L,t=U)(z=Z){
- instruction 0xA8D5
- };
-
- // Bit Transfer Operations
-
- QScrollRect :: !Rect !Int !Int !RgnHandle !Toolbox -> Toolbox;
- QScrollRect (left,top,right,bottom) dh dv updateRgn t =
- code (right=W,bottom=W,left=W,top=W,dh=O0W,dv=W,updateRgn=L,t=U)(z=I8Z){
- instruction 0xA8EF || _ScrollRect
- };
-
- CopyBits :: !Ptr !Int !Rect !Ptr !Int !Rect !Rect !Rect !Int !RgnHandle !Toolbox -> Toolbox;
- CopyBits
- srcBaseAddr srcRowBytes (srcBoundsLeft,srcBoundsTop,srcBoundsRight,srcBoundsBottom)
- destBaseAddr destRowBytes (destBoundsLeft,destBoundsTop,destBoundsRight,destBoundsBottom)
- (srcLeft,srcTop,srcRight,srcBottom) (destLeft,destTop,destRight,destBottom)
- mode maskRgn t =
- code (
- srcBoundsRight=W, srcBoundsBottom=W, srcBoundsLeft=W, srcBoundsTop=W, srcRowBytes=W, srcBaseAddr=L,
- destBoundsRight=W, destBoundsBottom=W, destBoundsLeft=W, destBoundsTop=W, destRowBytes=W, destBaseAddr=L,
- srcRight=W, srcBottom=W, srcLeft=W, srcTop=W,
- destRight=W, destBottom=W, destLeft=W, destTop=W,
- mode=U, maskRgn=U, t=U)(z=Z)
- {
- instruction 0x486F 0x001E || pea 8+8+14(sp)
- instruction 0x486F 0x0014 || pea 8+8+4(sp)
- instruction 0x486F 0x0010 || pea 8+8(sp)
- instruction 0x486F 0x000C || pea 12(sp)
- instruction 0x3F2F 0x0072 || move.w 44+80-28+16+2(sp),-(sp)
- instruction 0x2F2F 0x0076 || move.l 44+84-28+18(sp),-(sp)
- instruction 0xa8ec
- instruction 0x4FEF 0x002C || lea 8+8+14+14(sp),sp
- };
-
- // Pictures
-
- QOpenPicture :: !Rect !Toolbox -> (!PicHandle, !Toolbox);
- QOpenPicture (left,top,right,bottom) t =
- code (right=W,bottom=W,left=W,top=W,t=R4O4D0)(pic_handle=L,z=I8Z){
- instruction 0xA8F3
- };
-
- QClosePicture :: !PicHandle !Toolbox -> Toolbox;
- QClosePicture picture t = code (picture=D1,t=U)(z=Z){
- instruction 0xA8F4 || _ClosePicture
- };
-
- QDrawPicture :: !PicHandle !Rect !Toolbox -> Toolbox;
- QDrawPicture picture (left,top,right,bottom) c =
- code (right=W,bottom=W,left=W,top=W,picture=L,c=O4U)(z=I8Z){
- instruction 0xA8F6
- };
-
- QKillPicture :: !PicHandle !Toolbox -> Toolbox;
- QKillPicture picture t = code (picture=L,t=U)(z=Z){
- instruction 0xA8F5
- };
-
- // Calculations with Polygons
-
- QOpenPoly :: !Toolbox -> (!PolyHandle, !Toolbox);
- QOpenPoly t = code (t=R4U)(poly=L,z=Z){
- instruction 0xA8CB || _OpenPoly
- };
-
- QClosePoly :: !PolyHandle !Toolbox -> Toolbox;
- QClosePoly poly t = code (poly=U,t=U)(z=Z){
- instruction 0xA8CC || _ClosePgon
- };
-
- QKillPoly :: !PolyHandle !Toolbox -> Toolbox;
- QKillPoly poly t = code (poly=L,t=U)(z=Z){
- instruction 0xA8CD
- };
-
- QOffsetPoly :: !PolyHandle !Int !Int !Toolbox -> Toolbox;
- QOffsetPoly poly dh dv t = code (poly=L,dh=W,dv=W,t=U)(z=Z){
- instruction 0xA8CE
- };
-
- // Graphic Operations on Polygons
-
- QFramePoly :: !PolyHandle !Toolbox -> Toolbox;
- QFramePoly poly t = code (poly=L,t=U)(z=Z){
- instruction 0xA8C6
- };
-
- QPaintPoly :: !PolyHandle !Toolbox -> Toolbox;
- QPaintPoly poly t = code (poly=L,t=U)(z=Z){
- instruction 0xA8C7
- };
-
- QErasePoly :: !PolyHandle !Toolbox -> Toolbox;
- QErasePoly poly t = code (poly=L,t=U)(z=Z){
- instruction 0xA8C8
- };
-
- QInvertPoly :: !PolyHandle !Toolbox -> Toolbox;
- QInvertPoly poly t = code (poly=L,t=U)(z=Z){
- instruction 0xA8C9
- };
-
- // Calculations with Points
-
- // Miscellaneous Routines
-
- QLocalToGlobal :: !Int !Int !Toolbox -> (!Int,!Int,!Toolbox);
- QLocalToGlobal h v t = (nh,nv,z);
- {
- (nv,nh,z)= QLocalToGlobal h v t;
-
- QLocalToGlobal :: !Int !Int !Toolbox -> (!Int,!Int,!Toolbox);
- QLocalToGlobal h v t = code (h=W,v=W,t=O0U)(nvr=W,nhr=W,zr=Z){
- instruction 0xA870
- };
- }
-
- QGlobalToLocal :: !Int !Int !Toolbox -> (!Int,!Int,!Toolbox);
- QGlobalToLocal h v t = (nh,nv,z);
- {
- (nv,nh,z)= QGlobalToLocal h v t;
-
- QGlobalToLocal :: !Int !Int !Toolbox -> (!Int,!Int,!Toolbox);
- QGlobalToLocal h v t = code (h=W,v=W,t=O0U)(nvr=W,nhr=W,zr=Z){
- instruction 0xA871
- };
- }
-
- QScreenRect :: !Toolbox -> (!Int,!Int,!Int,!Int,!Toolbox);
- QScreenRect tb = (left, top, right, bottom, tb);
- {
- (left, top, right, bottom)=: QScreenRect1;
- };
-
- QScreenRect1 :: (!Int,!Int,!Int,!Int);
- QScreenRect1 = code ()(left=D3,top=D2,right=D1,bottom=D0){
- instruction 0x2055 || move.l (a5),a0
- instruction 0x4CA8 0x000F 0xFF8C || movem.w -116(a0),d0-d3
- instruction 0xC142 || exg d0,d2
- instruction 0xC343 || exg d1,d3
- };
-
- HasColorQD :: !Toolbox -> (!Bool,!Toolbox);
- HasColorQD tb = (HasColorQD1, tb);
-
- HasColorQD1 :: Bool;
- HasColorQD1 = code {
- .d 0 0
- jsr _has_color_qd
- .o 0 1 b
- };
-
- // Customizing Quickdraw Operations
-
- QStdTxMeas :: !Int !{#Char} !(!Int,!Int) !(!Int,!Int) !(!Int,!Int,!Int,!Int) !Toolbox
- -> (!Int,!(!Int,!Int),!(!Int,!Int),!(!Int,!Int,!Int,!Int),!Toolbox);
- QStdTxMeas byteCount s (srcnumerh,srcnumerv) (srcdenomh,srcdenomv) (srcascent,srcdescent,srcwidMax,srcleading) tb
- = (width,(destnumerh,destnumerv),(destdenomh,destdenomv),(destascent,destdescent,destwidMax,destleading),tb1)
- where {
- (width,numer,denom,descasc,leadwid,tb1)
- = QStdTxMeas` byteCount s srcnumerv srcnumerh srcdenomv srcdenomh srcascent srcdescent srcwidMax srcleading tb;
- (destnumerh,destnumerv) = longTo2Word numer;
- (destdenomh,destdenomv) = longTo2Word denom;
- (destdescent,destascent)= longTo2Word descasc;
- (destleading,destwidMax)= longTo2Word leadwid;
- };
-
- QStdTxMeas` :: !Int !{#Char} !Int !Int !Int !Int !Int !Int !Int !Int !Toolbox
- -> (!Int,!Int,!Int,!Int,!Int,!Toolbox);
- QStdTxMeas` byteCount s srcnumerv srcnumerh srcdenomv srcdenomh srcascent srcdescent srcwidMax srcleading tb
- = code (srcleading=W,srcwidMax=W,srcdescent=W,srcascent=W,srcdenomh=W,srcdenomv=W,srcnumerh=W,srcnumerv=W,byteCount=R2W,s=S,tb=O8O16O24U)
- (width=W,numer=L,denom=L,ascdesc=L,widlead=L,z=Z){
- instruction 0x52AF 0x000C | addq.l #1,12(sp)
- instruction 0xA8ED | _StdTxMeas
- };
-
- longTo2Word :: !Int -> (!Int,!Int);
- longTo2Word long = (word1,word2);
- where {
- word1 = (long<<16)>>16;
- word2 = long>>16;
- };
-